package main

import (
	"fmt"
	"strconv"
)

func main() {
	fmt.Println("main invoke")
	//异常信息  panic: -1001, 出错啦
	handleCustomError()
	fmt.Println("main end")
}

type CustomError struct {
	Code int
	Msg  string
}

// 为CustomError绑定Error方法，可令其实现了error接口
func (e *CustomError) Error() string {
	//将数组转为字符串
	return strconv.Itoa(e.Code) + ", " + e.Msg
}

func handleCustomError() {
	e := CustomError{
		Code: -1001,
		Msg:  "出错啦",
	}
	//panic函数接受的参数就是接口类型，并且是一个空接口，因此所有类型都可以传递到panic函数中
	//程序的中断关键在于panic，非参数的类型，参数只是异常信息的载体
	panic(&e)
}
